package pe.com.bbva.mantenimiento.action;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import pe.com.bbva.mantenimiento.bo.KitBO;
import pe.com.bbva.mantenimiento.bo.KitMaterialBO;
import pe.com.bbva.mantenimiento.bo.TablaBO;
import pe.com.bbva.mantenimiento.bo.TipoTarjetaBO;
import pe.com.bbva.mantenimiento.domain.Kit;
import pe.com.bbva.mantenimiento.domain.KitMaterial;
import pe.com.bbva.mantenimiento.domain.Material;
import pe.com.bbva.mantenimiento.domain.Tabla;
import pe.com.bbva.mantenimiento.domain.TipoTarjeta;
import pe.com.bbva.util.Constantes;
import pe.com.bbva.util.SelectItem;
import pe.com.bbva.util.Util;
import pe.com.stefanini.core.action.GenericAction;
import pe.com.stefanini.core.domain.UsuarioSession;
import pe.com.stefanini.core.exceptions.BOException;
import pe.com.stefanini.core.exceptions.DAOException;
import pe.com.stefanini.core.util.FechaUtil;
import pe.com.stefanini.core.util.StringUtil;

@Service("kitAction")
@Scope("prototype")
@Results({
	@Result(name="viewListKit", type = "tiles", location = "viewListKit"),
	@Result(name="viewFormKit", type = "tiles", location = "viewFormKit"),
	@Result(name="viewFormMaterialAdicional", type = "tiles", location = "viewFormMaterialAdicional"),
	@Result(name="listaKits", type = "json", params = { "root", "grid" }),
	@Result(name="listaMaterialAdicionales", type = "json", params = { "root", "grid" }),
	@Result(name="itemProvincia",type="json"),
	@Result(name="itemDistrito",type="json")
})
public class KitAction extends GenericAction {
	private static final long serialVersionUID = 1L;
	private Logger logger = Logger.getLogger(this.getClass());

	@Resource
	private KitBO kitBO;

	@Resource
	private KitMaterialBO kitMaterialBO;

	@Resource
	private TablaBO tablaBO;
	
	@Resource
	private TipoTarjetaBO tipoTarjetaBO;

	//PROPIEDADES PARA EL MANTENIMIENTO DE KIT'S
	private Long idKit;
	private Long idKitMaterial;
	private Kit kit;
	private Kit kitBuscar;
	private KitMaterial material;
	private KitMaterial materialBuscar;
	private String codigoAnterior;

	private List<Material> listaKits;
	private List<SelectItem> itemTecnologia;
	private List<SelectItem> itemTipoTarjeta;
	
	private List<SelectItem> itemTecnologiaEd;
	private List<SelectItem> itemTipoTarjetaEd;
	
	private List<SelectItem> itemTipoMatPrincipal;
	private List<SelectItem> itemTipoMatAdicional;
	
	private boolean deshabilitado;
	private boolean deshabilitadoMat;
	private boolean apMasiva;
	
	//PROPIEDADES PARA EL MANTENIMIENTO DE KIT MATERIAL
	private Long idKitAdicional;
	
	private List<SelectItem> itemDepartamento;
	private List<SelectItem> itemProvincia;
	private List<SelectItem> itemDistrito;
	private List<SelectItem> itemSegmento;
	
	private Long idDepartamento;
	private Long idProvincia;
	
	private String fechaInicio;
	private String fechaFin;
	
	private String fechaInicioAdicional;
	private String fechaFinAdicional;
	
	private String diaAntiguoInicio;
	private String diaAntiguoFin;
	private String codEncarte;
	private String codManipulado;
	private Long idTipoMaterial;
	
	public void cleanForm() {
		setIdKit(null);
		setIdKitMaterial(null);
		setCodigoAnterior("");
		setIdKitAdicional(null);
		setIdDepartamento(null);
		setIdProvincia(null);
		setFechaFin("");
		setFechaInicio("");
		setDiaAntiguoFin("");
		setDiaAntiguoInicio("");
		setCodEncarte("");
		setCodManipulado("");
		setFechaFinAdicional("");
		setFechaInicioAdicional("");
	}
	
	@Action(value = "initKit")
	public String init() throws BOException, DAOException {
		Date today = new Date();
		Long fechaActualNumero = today.getTime();
		String fechaActual = FechaUtil
		.formatFechaActual(FechaUtil.DDMMYYYY);
		KitMaterial findKit = new KitMaterial();
		findKit.setEstado(Constantes.VAL_ACTIVO);
		List<KitMaterial> listaKitMaterialActivo= kitMaterialBO.findKits(findKit);
		cleanForm();
		return "viewListKit";
	}

	@Action(value = "findAllKit")
	public String findAll() {
		try {
			if (kitBuscar == null) {
				kitBuscar = new Kit();
			}
			listaKits = new ArrayList<Material>();
			List<Kit> kitsTmp = kitBO.findKits(kitBuscar);
			for(Kit kitTmp: kitsTmp){
				Material materialTmp = new Material();
				if(kitTmp.getApMasiva().equals(Constantes.ESTADO_INACTIVO)){
					TipoTarjeta tipoTarjetaTmp = tipoTarjetaBO.findById(kitTmp.getTipoTarjeta().getId());
					materialTmp.setId(kitTmp.getId());
					materialTmp.setBin(tipoTarjetaTmp.getBin().getCodigo());
					materialTmp.setCodTarjeta(tipoTarjetaTmp.getCodTarjeta().getCodigo());
					materialTmp.setDescripcion(tipoTarjetaTmp.getDescripcion());
					materialTmp.setTamanio(tipoTarjetaTmp.getTamTarjeta().getDescripcion());
					materialTmp.setTecnologia(kitTmp.getTecnologia().getDescripcion());
					materialTmp.setEstado(kitTmp.getEstado());
					materialTmp.setCodigoGPS(kitTmp.getCodGPS());
				}else{
					materialTmp.setId(kitTmp.getId());
					materialTmp.setBin("-");
					materialTmp.setCodTarjeta("-");
					materialTmp.setDescripcion("KIT DE APERTURAS MASIVAS");
					materialTmp.setTamanio("-");
					materialTmp.setTecnologia("-");
					materialTmp.setEstado(kitTmp.getEstado());
					materialTmp.setCodigoGPS("-");
				}
				if(kitTmp.getFechaModificacion()==null)
					materialTmp.setFechaActualizacion(Util.getFormatoCompleto(kitTmp.getFechaCreacion()));
				else
					materialTmp.setFechaActualizacion(Util.getFormatoCompleto(kitTmp.getFechaModificacion()));
				listaKits.add(materialTmp);
			}
			setGrid(kitBO.findToGrid(listaKits, getSidx() + " " + getSord(), getPage(), getRows()));
			if (getGrid().getRecords().equals(new Integer(0))) {
				addActionError("No se encontraron resultados");
			}
		} catch (BOException e) {
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "listaKits";
	}
	
	@Action(value = "newKit")
	public String newForm() {
		kit = new Kit();
		material = new KitMaterial();
		try {
			Tabla tablaManipulado  =  tablaBO.findById(Constantes.ID_TABLA_MA_MANIPULADO);
			Tabla tablaEncarte  =  tablaBO.findById(Constantes.ID_TABLA_MA_ENCARTE);
			
			if(tablaManipulado != null && tablaManipulado.getCodigo().length()>0){
				codManipulado = tablaManipulado.getCodigo();
			}
			if(tablaEncarte != null && tablaEncarte.getCodigo().length()>0){
				codEncarte = tablaEncarte.getCodigo();
			}
		} catch (BOException e) {
			codManipulado = "";
			codEncarte = "";
			logger.error(StringUtil.getStackTrace(e));
		} catch (DAOException e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewFormKit";
	}
	
	@Action(value = "updateKit")
	public String updateKit() {
		try {
			kit = kitBO.findById(idKit);
			Tabla tablaManipulado  =  tablaBO.findById(Constantes.ID_TABLA_MA_MANIPULADO);
			Tabla tablaEncarte  =  tablaBO.findById(Constantes.ID_TABLA_MA_ENCARTE);
			
			if(tablaManipulado != null && tablaManipulado.getCodigo().length()>0){
				codManipulado = tablaManipulado.getCodigo();
			}
			
			if(tablaEncarte != null && tablaEncarte.getCodigo().length()>0){
				codEncarte = tablaEncarte.getCodigo();
			}
			
			logger.info("Id Kit editado:"+idKit);
			codigoAnterior = kit.getCodGPS();
			logger.info("codigoAnterior:"+codigoAnterior);
			KitMaterial materialBusc = new KitMaterial();
			materialBusc.setKit(kit);
			List<KitMaterial> materialesTmp = kitMaterialBO.findKits(materialBusc);
			logger.info("Tamanio lista Materiales:"+materialesTmp.size());
			for(KitMaterial materialTmp: materialesTmp){
				if(kit.getApMasiva().equals("0")){
					logger.info("Indicador Masivo:"+kit.getApMasiva());
					if(!materialTmp.getTipoMaterial().getId().equals(Constantes.ID_TABLA_ENCARTE) &&
						!materialTmp.getTipoMaterial().getId().equals(Constantes.ID_TABLA_MANIPULADO))	{
						material = materialTmp;
						setFechaInicio(Util.getFormatoFecha(material.getFechaInicio()));
						setFechaFin(Util.getFormatoFecha(material.getFechaFin()));
						//deshabilitadoMat = false;
						//if(material.getEstado().equals("0"))
						//	deshabilitadoMat = true;
						idKitAdicional = material.getId();
					}
				}
			}
			apMasiva = false;
			if(kit.getApMasiva().equals(Constantes.ESTADO_ACTIVO)){
				apMasiva = true;
			}else{
				apMasiva = false;
			}

			if(kit.getEstado().equals(Constantes.ESTADO_INACTIVO)){
				deshabilitado = true;
			}else{
				deshabilitado = false;
			}
		} catch (BOException e) {
			codManipulado = "";
			codEncarte = "";
			logger.error(StringUtil.getStackTrace(e));
		} catch (DAOException e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewFormKit";
	}

	@Action(value = "saveKit")
	public String save() throws BOException, DAOException {
		String mensaje = "";
		boolean flagUpdateVigencia = false;
		if (kit.getId() == null) {
			mensaje = "Registrado Correctamente";
		} else {
			mensaje = "Actualizado Correctamente";
		}
		try {
			UsuarioSession usuarioSession = (UsuarioSession) getObjectSession(Constantes.USUARIO_SESSION);
			setCamposAuditoria(kit, usuarioSession);
			Tabla tablaManipulado  =  tablaBO.findById(Constantes.ID_TABLA_MA_MANIPULADO);
			Tabla tablaEncarte  =  tablaBO.findById(Constantes.ID_TABLA_MA_ENCARTE);
			
			if(tablaManipulado != null && tablaManipulado.getCodigo().length()>0){
				codManipulado = tablaManipulado.getCodigo();
			}
			
			if(tablaEncarte != null && tablaEncarte.getCodigo().length()>0){
				codEncarte = tablaEncarte.getCodigo();
			}
			if(deshabilitado){
				kit.setEstado(Constantes.ESTADO_INACTIVO);
			}else{
				kit.setEstado(Constantes.ESTADO_ACTIVO);
			}
			if(apMasiva){
				kit.setApMasiva(Constantes.ESTADO_ACTIVO);
			}else{
				kit.setApMasiva(Constantes.ESTADO_INACTIVO);
			}
			kitBO.save(kit, codigoAnterior);
			kit = kitBO.findById(kit.getId());
			setCamposAuditoria(material, usuarioSession);
			
			material.setKit(kit);

			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			if (fechaInicio != null && fechaFin != null) {
				material.setFechaInicio(sdf.parse(fechaInicio));
				Date fin = sdf.parse(fechaFin);
				material.setFechaFin(fin);
				Date hoy = sdf.parse(Util.getFormatoFecha(new Date()));
				String estado = Constantes.VAL_ACTIVO;
				if (kit.getEstado().equals(Constantes.ESTADO_ACTIVO)) {
					if (fin.before(hoy) && !fin.equals(hoy)) {
						estado = Constantes.VAL_INACTIVO;
						flagUpdateVigencia = true;
					}
					material.setEstado(estado);
				}else{
					material.setEstado(Constantes.VAL_INACTIVO);
				}
			}

			if(!flagUpdateVigencia){
				kitMaterialBO.save(material);
				addActionMessage(mensaje);
			}else{
				addActionError("Actualice las Fechas del Material Principal...");
			}

			setIdKit(kit.getId());
		} catch (BOException e) {
			kit = new Kit();
			material = new KitMaterial();
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			kit = new Kit();
			material = new KitMaterial();
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewFormKit";
	}

	@Action(value="findProvincia")
	public String findProvincia() throws BOException, DAOException {
		itemProvincia = new ArrayList<SelectItem>();
		List<Tabla> listAux = tablaBO.findHijos(idDepartamento);
		for (Tabla tipo : listAux) {
			itemProvincia.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return "itemProvincia";
	}
	
	@Action(value="findDistrito")
	public String findDistrito() throws BOException, DAOException {
		itemDistrito = new ArrayList<SelectItem>();
		List<Tabla> listAux = tablaBO.findHijos(idProvincia);
		for (Tabla tipo : listAux) {
			itemDistrito.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return "itemDistrito";
	}
	
	@Action(value="findAllMaterialAdicional")
	public String findAllMaterialAdicional() {
		try {
			if(materialBuscar == null){
				materialBuscar = new KitMaterial();
			}
			Kit kitTmp = kitBO.findById(idKit); 
			materialBuscar.setKit(kitTmp);
			listaKits = new ArrayList<Material>();
			List<KitMaterial> kitMaterialesTmp = kitMaterialBO.findKits(materialBuscar);
			for(KitMaterial kitMaterialTmp: kitMaterialesTmp){
				Material materialTmp = new Material();
				materialTmp.setId(kitMaterialTmp.getId());
				if(kitMaterialTmp.getTipoMaterial()!=null){
					materialTmp.setCodTarjeta(kitMaterialTmp.getTipoMaterial().getCodigo());
					materialTmp.setDescripcion(kitMaterialTmp.getTipoMaterial().getDescripcion());
					materialTmp.setTipoMaterial(kitMaterialTmp.getTipoMaterial().getId());
					if(kitMaterialTmp.getTipoMaterial().getId().equals(Constantes.ID_TABLA_ENCARTE) ||
					   kitMaterialTmp.getTipoMaterial().getId().equals(Constantes.ID_TABLA_MANIPULADO))
					{
						materialTmp.setCodigoGPS(kitMaterialTmp.getTipoMaterial().getAbreviado());
					}else{
						materialTmp.setCodigoGPS(kitTmp.getCodGPS());
					}
					materialTmp.setFechaInicio(Util.getFormatoFecha(kitMaterialTmp.getFechaInicio()));
					materialTmp.setFechaFin(Util.getFormatoFecha(kitMaterialTmp.getFechaFin()));
					materialTmp.setCantidad(kitMaterialTmp.getCantidad());
					String estado = kitMaterialTmp.getEstado();
			   		if(estado.equals("1")){
						SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			        	Date hoy = sdf.parse(Util.getFormatoFecha(new Date()));
			        	Date fin = sdf.parse(Util.getFormatoFecha(kitMaterialTmp.getFechaFin()));
						if(fin.before(hoy) && !fin.equals(hoy)){
							estado = "0";
							kitMaterialTmp.setEstado(estado);
							kitMaterialBO.save(kitMaterialTmp);
						}else{
							estado = "1";
							kitMaterialTmp.setEstado(estado);
							kitMaterialBO.save(kitMaterialTmp);
						}
			   		}
			   		materialTmp.setEstado(estado);
				}else{
					materialTmp.setCodTarjeta("-");
					materialTmp.setDescripcion("APERTURAS MASIVAS PRINCIPAL");
					materialTmp.setCodigoGPS("-");
					materialTmp.setFechaInicio("-");
					materialTmp.setFechaFin("-");
					materialTmp.setCantidad(0);
				}
				listaKits.add(materialTmp);
			}
			setGrid(kitBO.findToGrid(listaKits, getSidx() + " " + getSord(), getPage(), getRows()));
			if (getGrid().getRecords().equals(new Integer(0))) {
				addActionError("No se encontraron resultados");
			}
		} catch (BOException e) {
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		}
		return "listaMaterialAdicionales";
	}
	
	@Action(value = "newKitMaterial")
	public String newKitMaterialForm() {
		material = new KitMaterial();
		setDiaAntiguoFin("");
		setDiaAntiguoInicio("");
		return "viewFormMaterialAdicional";
	}
	
	@Action(value = "updateKitMaterial")
	public String updateKitMaterialKit() {
		try {
			material = kitMaterialBO.findById(idKitMaterial);
			setFechaInicioAdicional(Util.getFormatoFecha(material.getFechaInicio()));
			setFechaFinAdicional(Util.getFormatoFecha(material.getFechaFin()));
			setDiaAntiguoInicio(Util.getFormatoFecha(material.getFechaInicio()));
			setDiaAntiguoFin(Util.getFormatoFecha(material.getFechaFin()));
			deshabilitadoMat = false;
			if(material.getEstado().equals("0"))
				deshabilitadoMat = true;
			setIdKit(material.getKit().getId());
			
			Tabla provincia = tablaBO.findById(material.getUbigeo().getPadre().getId());
			Tabla departamento = tablaBO.findById(provincia.getPadre().getId()); 
			
			idProvincia = provincia.getId();
			idDepartamento = departamento.getId();
			
			itemProvincia = new ArrayList<SelectItem>();
			List<Tabla> departamentosTmp = tablaBO.findHijos(idDepartamento);
			for (Tabla tipo : departamentosTmp) {
				itemProvincia.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
			}
			
			itemDistrito = new ArrayList<SelectItem>();
			List<Tabla> provinciasTmp = tablaBO.findHijos(idProvincia);
			for (Tabla tipo : provinciasTmp) {
				itemDistrito.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
			}
		} catch (BOException e) {
			logger.error(StringUtil.getStackTrace(e));
		} catch (DAOException e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewFormMaterialAdicional";
	}
	
	@Action(value = "saveKitMaterial")
	public String saveKitMaterial() throws BOException, DAOException {
		String mensaje = "";
		if (material.getId() == null) {
			mensaje = "Registrado Correctamente";
		} else {
			mensaje = "Actualizado Correctamente";
		}
		try {
			UsuarioSession usuarioSession = (UsuarioSession) getObjectSession(Constantes.USUARIO_SESSION);
			setCamposAuditoria(material, usuarioSession);
			Tabla tablaManipulado  =  tablaBO.findById(Constantes.ID_TABLA_MA_MANIPULADO);
			Tabla tablaEncarte  =  tablaBO.findById(Constantes.ID_TABLA_MA_ENCARTE);
			
			if(tablaManipulado != null && tablaManipulado.getCodigo().length()>0){
				codManipulado = tablaManipulado.getCodigo();
			}
			
			if(tablaEncarte != null && tablaEncarte.getCodigo().length()>0){
				codEncarte = tablaEncarte.getCodigo();
			}
			Kit kitTmp = kitBO.findById(idKit); 
			material.setKit(kitTmp);
        	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        	material.setFechaInicio(sdf.parse(fechaInicioAdicional));
        	Date hoy = sdf.parse(Util.getFormatoFecha(new Date()));
        	Date fin = sdf.parse(fechaFinAdicional);
        	material.setFechaFin(fin);
        	String estado = "1";
			if(fin.before(hoy) && !fin.equals(hoy)){
				estado = "0";
			}
			material.setEstado(estado);
			if(deshabilitadoMat){
				material.setEstado(Constantes.ESTADO_INACTIVO);
			}
			kitMaterialBO.save(material);
			addActionMessage(mensaje);
			setIdKit(idKit);
			setKit(kitTmp);
			KitMaterial materialBusc = new KitMaterial();
			materialBusc.setKit(kit);
			List<KitMaterial> materialesTmp = kitMaterialBO.findKits(materialBusc);
			for(KitMaterial materialTmp: materialesTmp){
				if(!materialTmp.getTipoMaterial().getId().equals(Constantes.ID_TABLA_ENCARTE) &&
					!materialTmp.getTipoMaterial().getId().equals(Constantes.ID_TABLA_MANIPULADO))
				{
					material = materialTmp;
				}
			}
		} catch (BOException e) {
			kit = new Kit();
			material = new KitMaterial();
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			kit = new Kit();
			material = new KitMaterial();
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewFormKit";
	}
	
	@Action(value="loadDate")
	public void loadDate() {
		StringBuilder stb = new StringBuilder();
		try {
			getResponse().setContentType("text/html");
			PrintWriter out = getResponse().getWriter();
			Date fecha = null;
			logger.info("idTipoMaterial:"+idTipoMaterial);
			logger.info("idKit:"+idKit);
			if(idTipoMaterial!=null & idKit != null){
				fecha = kitBO.maxFechaMaterial(idTipoMaterial, idKit);
				if(fecha != null){
					stb.append("{\"fecha\": \"");
					stb.append(FechaUtil.formatFecha(fecha, FechaUtil.DDMMYYYY));
					stb.append("\"}");
				}else{
					stb.append("{\"fecha\": \"");
					stb.append(FechaUtil.formatFecha(FechaUtil.getFechaActualDate(), FechaUtil.DDMMYYYY));
					stb.append("\"}");
				}
			}else{
					stb.append("{\"fecha\": \"");
					stb.append(FechaUtil.formatFecha(FechaUtil.getFechaActualDate(), FechaUtil.DDMMYYYY));
					stb.append("\"}");
			}
			logger.info("stb.toString():"+stb.toString());
			out.print(stb.toString());
			
		} catch (BOException e) {
			stb.append("{\"fecha\": \"");
			stb.append(FechaUtil.getFechaActualString());
			stb.append("\"}");
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			stb.append("{\"fecha\": \"");
			stb.append(FechaUtil.getFechaActualString());
			stb.append("\"}");
			logger.error(StringUtil.getStackTrace(e));
		}
	}
	
	public List<SelectItem> getItemTecnologia() throws BOException, DAOException {
		itemTecnologia = new ArrayList<SelectItem>();
		itemTecnologia.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION_TODOS));
		List<Tabla> listAux = tablaBO.findHijos(Constantes.ID_TABLA_TECNOLOGIA);
		for (Tabla tabla : listAux) {
			itemTecnologia.add(new SelectItem(tabla.getId().toString(), tabla.getDescripcion()));
		}
		return itemTecnologia;
	}

	public void setItemTecnologia(List<SelectItem> itemTecnologia) {
		this.itemTecnologia = itemTecnologia;
	}
	
	public List<SelectItem> getItemTecnologiaEd() throws BOException, DAOException {
		itemTecnologiaEd = new ArrayList<SelectItem>();
		itemTecnologiaEd.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		List<Tabla> listAux = tablaBO.findHijos(Constantes.ID_TABLA_TECNOLOGIA);
		for (Tabla tabla : listAux) {
			itemTecnologiaEd.add(new SelectItem(tabla.getId().toString(), tabla.getDescripcion()));
		}
		return itemTecnologiaEd;
	}

	public void setItemTecnologiaEd(List<SelectItem> itemTecnologiaEd) {
		this.itemTecnologiaEd = itemTecnologiaEd;
	}
	
	public List<SelectItem> getItemTipoTarjeta() throws BOException, DAOException {
		itemTipoTarjeta = new ArrayList<SelectItem>();
		itemTipoTarjeta.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION_TODOS));
		TipoTarjeta tarjetaBuscar = new TipoTarjeta();
		tarjetaBuscar.setEstado(Constantes.VAL_ACTIVO);
		List<TipoTarjeta> listAux = tipoTarjetaBO.findTipos(tarjetaBuscar);
		for (TipoTarjeta tipo : listAux) {
			itemTipoTarjeta.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return itemTipoTarjeta;
	}

	public void setItemTipoTarjeta(List<SelectItem> itemTipoTarjeta) {
		this.itemTipoTarjeta = itemTipoTarjeta;
	}
	
	public List<SelectItem> getItemTipoTarjetaEd() throws BOException, DAOException {
		itemTipoTarjetaEd = new ArrayList<SelectItem>();
		itemTipoTarjetaEd.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		TipoTarjeta tarjetaBuscar = new TipoTarjeta();
		tarjetaBuscar.setEstado(Constantes.VAL_ACTIVO);
		List<TipoTarjeta> listAux = tipoTarjetaBO.findTipos(tarjetaBuscar);
		for (TipoTarjeta tipo : listAux) {
			itemTipoTarjetaEd.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return itemTipoTarjetaEd;
	}

	public void setItemTipoTarjetaEd(List<SelectItem> itemTipoTarjetaEd) {
		this.itemTipoTarjetaEd = itemTipoTarjetaEd;
	}

	public List<SelectItem> getItemTipoMatPrincipal() throws BOException, DAOException {
		itemTipoMatPrincipal = new ArrayList<SelectItem>();
		itemTipoMatPrincipal.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		List<Tabla> listAux = tablaBO.findHijos(Constantes.ID_TABLA_MATERIAL_PRINCIPAL);
		for (Tabla tipo : listAux) {
			itemTipoMatPrincipal.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return itemTipoMatPrincipal;
	}
	
	public void setItemTipoMatPrincipal(List<SelectItem> itemTipoMatPrincipal) {
		this.itemTipoMatPrincipal = itemTipoMatPrincipal;
	}

	public List<SelectItem> getItemTipoMatAdicional() throws BOException, DAOException {
		itemTipoMatAdicional = new ArrayList<SelectItem>();
		itemTipoMatAdicional.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		List<Tabla> listAux = tablaBO.findHijos(Constantes.ID_TABLA_MATERIAL_ASOCIADO);
		for (Tabla tipo : listAux) {
			itemTipoMatAdicional.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return itemTipoMatAdicional;
	}
	
	public void setItemTipoMatAdicional(List<SelectItem> itemTipoMatAdicional) {
		this.itemTipoMatAdicional = itemTipoMatAdicional;
	}
	
	public void setMaterialBuscar(KitMaterial materialBuscar) {
		this.materialBuscar = materialBuscar;
	}

	public KitMaterial getMaterialBuscar() {
		return materialBuscar;
	}

	public void setIdKit(Long idKit) {
		this.idKit = idKit;
	}

	public Long getIdKit() {
		return idKit;
	}

	public void setKit(Kit kit) {
		this.kit = kit;
	}

	public Kit getKit() {
		return kit;
	}

	public void setMaterial(KitMaterial material) {
		this.material = material;
	}

	public KitMaterial getMaterial() {
		return material;
	}

	public Kit getKitBuscar() {
		return kitBuscar;
	}

	public void setKitBuscar(Kit kitBuscar) {
		this.kitBuscar = kitBuscar;
	}

	public void setDeshabilitado(boolean deshabilitado) {
		this.deshabilitado = deshabilitado;
	}

	public boolean isDeshabilitado() {
		return deshabilitado;
	}

	public void setApMasiva(boolean apMasiva) {
		this.apMasiva = apMasiva;
	}

	public boolean isApMasiva() {
		return apMasiva;
	}

	public void setIdKitMaterial(Long idKitMaterial) {
		this.idKitMaterial = idKitMaterial;
	}

	public Long getIdKitMaterial() {
		return idKitMaterial;
	}

	public List<SelectItem> getItemDepartamento() throws BOException, DAOException {
		itemDepartamento = new ArrayList<SelectItem>();
		itemDepartamento.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		List<Tabla> listAux = tablaBO.findHijos(Constantes.ID_TABLA_DEPARTAMENTO);
		for (Tabla tipo : listAux) {
			itemDepartamento.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return itemDepartamento;
	}

	public void setItemDepartamento(List<SelectItem> itemDepartamento) {
		this.itemDepartamento = itemDepartamento;
	}

	public List<SelectItem> getItemProvincia() {
		if(itemProvincia==null || itemProvincia.isEmpty()){
			itemProvincia = new ArrayList<SelectItem>();
			itemProvincia.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		}
		return itemProvincia;
	}

	public void setItemProvincia(List<SelectItem> itemProvincia) {
		this.itemProvincia = itemProvincia;
	}

	public List<SelectItem> getItemDistrito() {
		if(itemDistrito==null || itemDistrito.isEmpty()){
			itemDistrito = new ArrayList<SelectItem>();
			itemDistrito.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		}
		return itemDistrito;
	}

	public void setItemDistrito(List<SelectItem> itemDistrito) {
		this.itemDistrito = itemDistrito;
	}

	public Long getIdDepartamento() {
		return idDepartamento;
	}

	public void setIdDepartamento(Long idDepartamento) {
		this.idDepartamento = idDepartamento;
	}

	public Long getIdProvincia() {
		return idProvincia;
	}

	public void setIdProvincia(Long idProvincia) {
		this.idProvincia = idProvincia;
	}

	public List<SelectItem> getItemSegmento() throws BOException, DAOException {
		itemSegmento = new ArrayList<SelectItem>();
		itemSegmento.add(new SelectItem("", Constantes.VAL_DEFAULT_SELECTION));
		List<Tabla> listAux = tablaBO.findHijos(Constantes.ID_TABLA_SEGMENTO);
		for (Tabla tipo : listAux) {
			itemSegmento.add(new SelectItem(tipo.getId().toString(), tipo.getDescripcion()));
		}
		return itemSegmento;
	}
	
	public void setItemSegmento(List<SelectItem> itemSegmento) {
		this.itemSegmento = itemSegmento;
	}
	
	public Long getIdKitAdicional() {
		return idKitAdicional;
	}

	public void setIdKitAdicional(Long idKitAdicional) {
		this.idKitAdicional = idKitAdicional;
	}

	public void setFechaFin(String fechaFin) {
		this.fechaFin = fechaFin;
	}

	public String getFechaFin() {
		return fechaFin;
	}

	public void setFechaInicio(String fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	public String getFechaInicio() {
		return fechaInicio;
	}

	public void setCodigoAnterior(String codigoAnterior) {
		this.codigoAnterior = codigoAnterior;
	}

	public String getCodigoAnterior() {
		return codigoAnterior;
	}

	public String getDiaAntiguoInicio() {
		return diaAntiguoInicio;
	}

	public void setDiaAntiguoInicio(String diaAntiguoInicio) {
		this.diaAntiguoInicio = diaAntiguoInicio;
	}

	public String getDiaAntiguoFin() {
		return diaAntiguoFin;
	}

	public void setDiaAntiguoFin(String diaAntiguoFin) {
		this.diaAntiguoFin = diaAntiguoFin;
	}

	public String getCodEncarte() {
		return codEncarte;
	}

	public void setCodEncarte(String codEncarte) {
		this.codEncarte = codEncarte;
	}

	public String getCodManipulado() {
		return codManipulado;
	}

	public void setCodManipulado(String codManipulado) {
		this.codManipulado = codManipulado;
	}

	public String getFechaInicioAdicional() {
		return fechaInicioAdicional;
	}

	public void setFechaInicioAdicional(String fechaInicioAdicional) {
		this.fechaInicioAdicional = fechaInicioAdicional;
	}

	public String getFechaFinAdicional() {
		return fechaFinAdicional;
	}

	public void setFechaFinAdicional(String fechaFinAdicional) {
		this.fechaFinAdicional = fechaFinAdicional;
	}
	
	public Long getIdTipoMaterial() {
		return idTipoMaterial;
	}

	public void setIdTipoMaterial(Long idTipoMaterial) {
		this.idTipoMaterial = idTipoMaterial;
	}

	public boolean isDeshabilitadoMat() {
		return deshabilitadoMat;
	}

	public void setDeshabilitadoMat(boolean deshabilitadoMat) {
		this.deshabilitadoMat = deshabilitadoMat;
	}
}